import cv2
import numpy as np

if __name__ == '__main__':
    # 1. 读取图片
    image = cv2.imread('tupian.png')

    # 2. 灰度化
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 3. 直接固定阈值二值化（不做高斯模糊）
    _, binary = cv2.threshold(
        gray,  # 直接用灰度图，不经过模糊
        135,   # 阈值：建议在140-170之间测试（无模糊时可能需要调低）
        255,
        cv2.THRESH_BINARY_INV  # 反二值化：背景黑，主体白
    )

    # 4. 形态学操作（重点：用腐蚀先去噪，再膨胀+闭运算填充主体）
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
    # 先腐蚀：去除二值化后可能出现的细碎白噪点
    eroded = cv2.erode(binary, kernel, iterations=1)
    # 再膨胀：扩大主体范围，连接断开区域
    dilated = cv2.dilate(eroded, kernel, iterations=2)
    # 闭运算：填充主体内部的孔洞，确保全白
    result = cv2.morphologyEx(dilated, cv2.MORPH_CLOSE, kernel, iterations=2)


    # 5. 保存并显示结果
    cv2.imwrite('binary_result_no_blur.png', result)
    cv2.namedWindow('Result', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('Result', 800, 600)
    cv2.imshow('Result', result)
    cv2.waitKey(0)
